In certain applications, such as in a network environment, relatively large amounts of data may have to be stored in storage subsystems of computer systems. In a network environment, many users store data and programs on one or more computer servers, which usually include or are attached to one or more storage subsystems of relatively large capacity. A computer server storage subsystem can be made up of a large number of storage devices, including hard disk drives, tape drives, compact disc (CD) drives, digital versatile disc (DVD) drives, and so forth.
A popular interface for coupling storage devices (and other peripheral devices) to a computer system is the small computer system interface (SCSI). A SCSI interface is traditionally a parallel interface (having multiple signals) to provide increased bandwidth in communications between a computer and a peripheral device. However, parallel interfaces may not be able to offer reliable performance at very high operating frequencies.
To address issues associated with traditional SCSI interfaces, a Serial Attached SCSI (SAS) Standard has been proposed. The SAS Standard defines the rules for exchanging information between SCSI devices using a serial interconnect. The SAS Standard also defines the rules for exchanging information between AT attached (ATA) host and ATA devices using the same serial interconnect. ATA is a standard for the internal attachment of storage devices to hosts. One version of the SAS Standard is defined by Working Draft American National Standard, “Information Technology-Serial Attached SCSI (SAS),” Revision 5, dated Jul. 9, 2003.
One feature of a SAS system is that multiple SAS domains can be defined, with each domain having a tree of interconnected devices that include one or more expanders. An expander increases the number of interfaces available to couple to peripheral devices (such as storage devices) within a given SAS domain. Expanders can be coupled to other expanders to further expand the capacity to attach to additional peripheral devices. Usually, each SAS domain (or SAS expander tree) is associated with one or more initiators. An initiator responds to commands from software in a computer system for accessing storage devices in a domain to retrieve data or to write data.
Each expander includes phys that are each coupled to an initiator, another expander, or a target device. A phy is a type of interface that communicates with another phy over a link. Phys are associated with route tables that contain routing information used to route an access request through phys of an expander such that the access request can reach the intended target device. The route table entries for certain types of phys are not utilized and thus are disabled. However, because the current version of the SAS Standard implements static route table binding, such unused route table entries are not available for use by other phys. As a result, the number of devices that a SAS expander can support is limited.